home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_319 / cnewssrc / cnews.src.lzh / libfake / mkdir.c < prev    next >
C/C++ Source or Header  |  1980-01-01  |  769b  |  42 lines

  1. /*
  2.  * 4.2BSD mkdir simulation
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <errno.h>
  7. #include <sys/types.h>    /* argh */
  8. #include "libc.h"
  9.  
  10. /* system call returns */
  11. #define SYS_OK 0
  12. #define SYS_ERR (-1)
  13.  
  14. #define UMASK_MASK 0777
  15.  
  16. #define STRLEN(s) (sizeof (s) - 1)        /* s must be a char array */
  17.  
  18. int
  19. mkdir(dir, mode)
  20. char *dir;
  21. int mode;
  22. {
  23.     register char *cbuf = malloc((unsigned)STRLEN("mkdir ") + strlen(dir) + 1);
  24.     register int oldmask, ret;
  25.  
  26.     if (cbuf == NULL) {
  27.         errno = ENOMEM;            /* kludge */
  28.         return SYS_ERR;
  29.     }
  30.     oldmask = umask(0);
  31.     (void) umask(~(mode & ~oldmask) & UMASK_MASK);
  32.  
  33.     (void) sprintf(cbuf, "mkdir %s", dir);
  34.     ret = (system(cbuf) != 0? SYS_ERR: SYS_OK);
  35.     if (ret == SYS_ERR)
  36.         errno = EINVAL;            /* kludge */
  37.  
  38.     (void) umask(oldmask);
  39.     free(cbuf);
  40.     return ret;
  41. }
  42.